<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel="stylesheet" type="text/css" href="../../doc/style.css" />
  <title>Shell</title>
</head>

<body>
<table bgcolor="#000000" width="100%" cellspacing="0" cellpadding="0" border="0" class="tmenu">
	<tr>
		<td><img src="../../doc/SciTEIco.png" height="64" width="64" alt="Scintilla icon" /></td>
		<td width="100%"><font size="5">Shell - Lua библиотека для SciTE</font></td>
	</tr>
</table>

<table bgcolor="#CCCCCC" width="100%" cellspacing="0" cellpadding="8" border="0" class="tmenu">
	<tr><td>
		<a href="../../doc/SciTEDoc_rus.html">Документация</a>&nbsp;&nbsp;
		<a href="../../doc/SciTEFAQ_rus.html">FAQ</a>&nbsp;&nbsp;
		<a href="../../doc/SciTERegEx_rus.html">Регулярные выражения</a>&nbsp;&nbsp;
		<a href="../../doc/SciTEExtension_rus.html">SciTE Extension</a>&nbsp;&nbsp;
		<a href="../../doc/SciTELua_rus.html">LUA</a>&nbsp;&nbsp;
		<a href="../../doc/SciTEDirector_rus.html">SciTE Director</a>&nbsp;&nbsp;
		<a href="../../doc/CommandValues_rus.html">Команды SciTE и Scintilla</a>&nbsp;&nbsp;
		<a href="../../doc/SciTE-Ru_Pack_rus.html">Сборка Ru-Board</a>&nbsp;&nbsp;
		<a href="../../doc/SciTE-Ru_Kernel_rus.html">Ядро SciTE-Ru</a>&nbsp;&nbsp;
		Shell&nbsp;&nbsp;
		<a href="../Helper/SciTE.Helper_rus.html">SciTE Helper</a>&nbsp;&nbsp;
		<a href="../../doc/ScintillaHistory_rus.html">История</a>
	</td></tr>
</table>

<h3>Описание</h3>

<p>Внешняя Lua библиотека, расширяющая возможности встроенного lua обработчика SciTE.</p>

<h3>Подключение</h3>

<p>Перед использованием функций библиотеки ее необходимо загрузить:</p>
<div class="example">
package.cpath = props["SciteDefaultHome"].."\\tools\\LuaLib\\?.dll;"..package.cpath<br />
-- покажем все пути, по которым SciTE будет искать нашу библиотеку<br />
print(package.cpath)<br />
-- загрузка библиотеки<br />
require 'shell'<br />
-- тест успешной загрузки<br />
if shell then<br />
&nbsp;&nbsp;table.foreach(shell, print)<br />
end
</div>

<h3>Функции</h3>

<table width="100%" cellpadding="1" cellspacing="0" border="1">

<tr><td>
	<p class="head">
		<dfn id="msgbox">msgbox (strMessageText, [strTitle], [intOptions])</dfn>
	</p>
	<p>
		<b>Описание:</b><br />
		&nbsp;&nbsp;Вывод текстового сообщения с кнопками.<br />
	<br />
	<b>Параметры:</b><br />
		&nbsp;&nbsp;<dfn>strMessageText</dfn> - текст сообщения<br />
		&nbsp;&nbsp;<dfn>strTitle</dfn> - текст заголовка сообщения<br />
		&nbsp;&nbsp;<dfn>intOptions</dfn> - числовое выражение, представляющее собой сумму значений, перечисленных в таблице.
	</p>
		<table style="margin-left:8pt;margin-top:3pt">
		<tr><th>Значение</th><th>Описание</th></tr>
		<tr>
		<td align="center">0</td>
		<td>Выводится кнопка ОК (значение по умолчанию)</td>
		</tr>
		<tr>
		<td align="center">1</td>
		<td>Выводятся кнопки ОК и Отмена (Cancel)</td>
		</tr>
		<tr>
		<td align="center">2</td>
		<td>Выводятся кнопки Стоп (Abort), Повтор (Retry) и Пропустить (Ignore)</td>
		</tr>
		<tr>
		<td align="center">3</td>
		<td>Выводятся кнопки Да (Yes), Нет (No) и Отмена (Cancel)</td>
		</tr>
		<tr>
		<td align="center">4</td>
		<td>Выводятся кнопки Да (Yes) и Нет (No)</td>
		</tr>
		<tr>
		<td align="center">5</td>
		<td>Выводятся кнопки Повтор (Retry) и Отмена (Cancel)</td>
		</tr>
		<tr>
		<td align="center">16</td>
		<td>Выводится значок Stop Mark</td>
		</tr>
		<tr>
		<td align="center">32</td>
		<td>Выводится значок Question Mark</td>
		</tr>
		<tr>
		<td align="center">48</td>
		<td>Выводится значок Exclamation Mark</td>
		</tr>
		<tr>
		<td align="center">64</td>
		<td>Выводится значок Information Mark</td>
		</tr>
		<tr>
		<td align="center">0</td>
		<td>По умолчанию в окне выбирается первая кнопка (значение по умолчанию)</td>
		</tr>
		<tr>
		<td align="center">256</td>
		<td>По умолчанию в окне выбирается вторая кнопка</td>
		</tr>
		<tr>
		<td align="center">512</td>
		<td>По умолчанию в окне выбирается третья кнопка</td>
		</tr>
		<tr>
		<td align="center">768</td>
		<td>По умолчанию в окне выбирается четвёртая кнопка</td>
		</tr>
		<tr>
		<td align="center">0</td>
		<td>Диалоговое окно выводится в модальном режиме (значение по умолчанию)</td>
		</tr>
		<tr>
		<td align="center">4096</td>
		<td>Диалоговое окно выводится в модальном режиме и располагается сверху всех запускаемых
		приложений</td>
		</tr>
		</table>
	<br />
	<p>
	<b>Возвращаемое значение:</b><br />
		&nbsp;&nbsp;Возвращает код нажатой кнопки. Значения перечислены в таблице:
	</p>
		<table style="margin-left:8pt;margin-top:3pt">
		<tr><th>Значение</th><th>Описание</th></tr>
		<tr>
		<td align="center">1</td>
		<td>Нажата кнопка ОК</td>
		</tr>
		<tr>
		<td align="center">2</td>
		<td>Нажата кнопка Отмена (Cancel)</td>
		</tr>
		<tr>
		<td align="center">3</td>
		<td>Нажата кнопка Стоп (Abort)</td>
		</tr>
		<tr>
		<td align="center">4</td>
		<td>Нажата кнопка Повтор (Retry)</td>
		</tr>
		<tr>
		<td align="center">5</td>
		<td>Нажата кнопка Пропустить (Ignore)</td>
		</tr>
		<tr>
		<td align="center">6</td>
		<td>Нажата кнопка Да (Yes)</td>
		</tr>
		<tr>
		<td align="center">7</td>
		<td>Нажата кнопка Нет (No)</td>
		</tr>
		</table>
		<br />
		<p><b>Пример использования:</b></p>
		<div class="example">
		if shell.msgbox("Вы уверены?", "SciTE", 65) == 1 then<br />
		&nbsp;&nbsp;print("Yes")<br />
		end<br />
		</div>
	<p class="author">Авторы: Midas, mimir</p>
</td></tr>

<tr><td>
	<p class="head">
		<dfn id="inputbox">inputbox(strCaptionText, strPrompt, strDefaultValue, funcCheckInput, intMinWidth)</dfn>
	</p>
	<p>
	<b>Описание:</b><br />
		&nbsp;&nbsp;Показывает диалоговое окно для ввода данных.<br />
	<br />
	<b>Параметры:</b><br />
		&nbsp;&nbsp;<dfn>strCaptionText</dfn> - текст заголовка окна. Значение по-умолчанию равно <var>"InputBox"</var><br />
		&nbsp;&nbsp;<dfn>strPrompt</dfn> - текст приглашения над полем ввода. Значение по-умолчанию равно <var>"Enter"</var><br />
		&nbsp;&nbsp;<dfn>strDefaultValue</dfn> - исходное значение поля ввода. Значение по-умолчанию равно пустой строке <var>""</var><br />
		&nbsp;&nbsp;<dfn>funcCheckInput</dfn> - функция для проверки вводимого текста. Получает текст в том виде, в каком он будет вместе с только что поступившим символом и возвращает либо <var>true</var> - принять этот символ, либо <var>false</var> - отклонить ввод. Значение по-умолчанию равно <var>nil</var> - ввод без каких-либо ограничений<br />
		&nbsp;&nbsp;<dfn>intMinWidth</dfn> - минимальная ширина поля ввода в усреднённых символах (если <var>strPrompt</var> или <var>strDefaultValue</var> будут шире, то минимальная ширина автоматически подгоняется под большее из них). Значение по-умолчанию равно <var>20</var><br />
		<br />
	<b>Возвращаемое значение:</b><br />
		&nbsp;&nbsp;содержит введенный текст. При отказе от ввода возвращает <var>nil</var><br />
	</p>
		<p><b>Пример использования:</b></p>
		<div class="example">
		print(shell.inputbox("Переименование файла", "Введите новое имя:", "filename.ext", function(name) return not name:match('[\\/:|*?"&lt;&gt;]') end))</div>
	<p class="author">Автор: qVaclav</p>
</td></tr>

<tr><td>
	<p class="head">
		<dfn id="getfileattr">getfileattr (strFileName)</dfn>
	</p>
	<p>
	<b>Описание:</b><br />
		&nbsp;&nbsp;Получение атрибутов файла.<br />
	<br />
	<b>Параметры:</b><br />
		&nbsp;&nbsp;<dfn>strFileName</dfn> - имя файла<br />
		<br />
	<b>Возвращаемое значение:</b><br />
		&nbsp;&nbsp;содержит атрибуты файла в виде числа<br />
	</p>
		<p><b>Пример использования:</b></p>
		<div class="example">
		local attr = shell.getfileattr("c:\\MSDOS.SYS")<br />
		print(attr)
		</div>
	<p class="author">Авторы: Midas, Дмитрий Маслов</p>
</td></tr>

<tr><td>
	<p class="head">
		<dfn id="setfileattr">setfileattr (strFileName, intFileAttr)</dfn>
	</p>
	<p>
	<b>Описание:</b><br />
		&nbsp;&nbsp;Установка атрибутов файла.<br />
	<br />
	<b>Параметры:</b><br />
		&nbsp;&nbsp;<dfn>strFileName</dfn> - имя файла<br />
		&nbsp;&nbsp;<dfn>iFileAttr</dfn> - атрибуты файла в числовом виде<br />
		<br />
	<b>Возвращаемое значение:</b><br />
		&nbsp;&nbsp;содержит <var>true</var> (при удачном завершении) либо <var>false</var> (при неудаче)<br />
	</p>
		<p><b>Пример использования:</b></p>
		<div class="example">
		local result = shell.setfileattr("c:\\MSDOS.SYS", 32)<br />
		if result == true then<br />
		&nbsp;&nbsp;print("Атрибуты установлены успешно")<br />
		else<br />
		&nbsp;&nbsp;print("error")<br />
		end
		</div>
	<p class="author">Авторы: Midas, Дмитрий Маслов</p>
</td></tr>

<tr><td>
	<p class="head">
		<dfn id="fileexists">fileexists (strFileName)</dfn>
	</p>
	<p>
	<b>Описание:</b><br />
		&nbsp;&nbsp;Проверяет существование файла или папки с указанным именем.<br />
	<br />
	<b>Параметры:</b><br />
		&nbsp;&nbsp;<dfn>strFileName</dfn> - имя файла или папки<br />
		<br />
	<b>Возвращаемое значение:</b><br />
		&nbsp;&nbsp;содержит <var>true</var> если файл (папка) существует, либо <var>false</var> в противном случае<br />
	</p>
		<p><b>Пример использования:</b></p>
		<div class="example">
		local result = shell.fileexists("c:\\MSDOS.SYS")<br />
		if result then<br />
		&nbsp;&nbsp;print("Файл существует")<br />
		else<br />
		&nbsp;&nbsp;print("Файл отсутствует")<br />
		end
		</div>
	<p class="author">Автор: VladVRO</p>
</td></tr>

<tr><td>
	<p class="head">
		<dfn id="exec">exec (strCommand, [strOperation], [boolNoShow], [bWaitOnReturn])</dfn>
	</p>
	<p>
	<b>Описание:</b><br />
		&nbsp;&nbsp;Выполнение внешней программы или открытие файла зарегистрированным приложением. Позволяет запускать файлы, документы и ссылки, а так же открывать каталоги в Проводнике Windows.<br />
	<br />
	<b>Параметры:</b><br />
		&nbsp;&nbsp;<dfn>strCommand</dfn> - имя файла или папки с возможными параметрами запуска. Может содержать <span class="nobr">%переменные_окружения%</span><br />
		&nbsp;&nbsp;<dfn>strOperation</dfn> - исполняемая операция из перечисленных в таблице:<br />
	</p>
		<table style="margin-left:8pt;margin-top:3pt">
		<tr><th>Значение</th><th>Описание</th></tr>
		<tr>
		<td align="center">open</td>
		<td>Открыть. strCommand - файл или папка (параметр по умолчанию)</td>
		</tr>
		<tr>
		<td align="center">edit</td>
		<td>Изменить. Открывает файл на редактирование. strCommand должен быть документом.</td>
		</tr>
		<tr>
		<td align="center">print</td>
		<td>Печать. strCommand должен быть документом.</td>
		</tr>
		<tr>
		<td align="center">explore</td>
		<td>Открывает папку в проводнике Windows (с двумя панелями). strCommand - файл или папка</td>
		</tr>
		<tr>
		<td align="center">select</td>
		<td>Открывает каталог в проводнике Windows и ставит выделение на файл или папку. strCommand - файл или папка</td>
		</tr>
		<tr>
		<td align="center">find</td>
		<td>Выводит диалоговое окно для поиска файлов по условиям, strCommand должен указывать путь к папке,<br />начиная с которой будет выполняться поиск</td>
		</tr>
		<tr>
		<td align="center">properties</td>
		<td>Выводит диалоговое окно свойств файла или папки, strCommand - файл или папка</td>
		</tr>
		<tr>
		<td align="center">другое</td>
		<td>Другая операция над файлом, имеющаяся в его контекстном меню. Например, есть операция "play" для мультимедийных файлов.</td>
		</tr>
		</table>
	<p>
		&nbsp;&nbsp;<dfn>boolNoShow</dfn> - <var>true</var> | <var>false</var> (значение по умолчанию) - скрывать или нет окно запускаемой программы<br />
		&nbsp;&nbsp;<dfn>bWaitOnReturn</dfn> - <var>true</var> | <var>false</var> (значение по умолчанию) - приостанавливать или нет скрипт на время выполнения команды<br />
	<br />
	<b>Возвращаемое значение:</b><br />
		&nbsp;&nbsp;Первое содержит<br />
		&nbsp;&nbsp;&nbsp;&nbsp;- при удачном завершении: <var>true</var> или, если функция была запущена с параметром <var>bWaitOnReturn = true</var>, код завершения процесса<br />
		&nbsp;&nbsp;&nbsp;&nbsp;- при неудаче: <var>false</var><br />
		&nbsp;&nbsp;Второе содержит сообщение об ошибке/успехе операции;<br />
		&nbsp;&nbsp;или содержит текст консольного вывода приложения (при запуске консольных приложений с параметрами <var>boolNoShow = true</var> и <var>bWaitOnReturn = true</var>)
	</p>
		<p><b>Пример использования:</b></p>
		<div class="example">
			-- запустить приложение<br />
			shell.exec("clipbrd.exe")<br />
			shell.exec("CMD /c IPCONFIG /all &gt; out.txt", nil, true, false)<br />
			<br />
			-- вывести результат консольного приложения<br />
			print( shell.exec("CMD /c DIR", nil, true, true) )<br />
			print( shell.exec("cscript /nologo %WINDIR%\\system32\\eventquery.vbs /?", nil, true, true) )<br />
			<br />
			-- анализ кода завершения процесса<br />
			if shell.exec("ping -n 1 localhost", nil, true, true) == 0 then<br />
			&nbsp;&nbsp;&nbsp;&nbsp;print("Сеть работает") else print("Сеть не работает")<br />
			end<br />
			<br />
			-- открыть каталог<br />
			shell.exec("%TEMP%")<br />
			shell.exec("%USERPROFILE%", "find")<br />
			shell.exec("regedit.exe", "explore")<br />
			shell.exec("%ProgramFiles%", "properties")<br />
			shell.exec("%ComSpec%", "select")<br />
			<br />
			-- открыть ссылку на сайт<br />
			shell.exec("http://scite-ru.org/")<br />
			<br />
			-- послать E-mail<br />
			shell.exec("mailto:support@mail.ru")<br />
			<br />
			-- открыть файл<br />
			shell.exec("%WINDIR%\\WindowsUpdate.log")<br />
			<br />
			-- распечатать файл<br />
			shell.exec("%WINDIR%\\win.ini", "print")<br />
			<br />
			-- редактировать файл<br />
			shell.exec("%WINDIR%\\winnt.bmp", "edit")
		</div>
	<p class="author">Авторы: Дмитрий Маслов</p>
</td></tr>

<tr><td>
	<p class="head">
		<dfn id="findfiles">findfiles (strFindMask)</dfn>
	</p>
	<p>
	<b>Описание:</b><br />
		&nbsp;&nbsp;Ищет файлы и папки по маске и результат возвращает в виде таблицы.<br />
	<br />
	<b>Параметры:</b><br />
		&nbsp;&nbsp;<dfn>strFindMask</dfn> - имя файла или папки, или маска с использованием группового символа (wildcard), который заменяет один или несколько символов: знак вопроса (<var>?</var>) может представлять любой одиночный символ; звездочка (<var>*</var>) используется для представления любого символа или группы символов.<br />
		<br />
	<b>Возвращаемое значение:</b><br />
		&nbsp;&nbsp;Возвращает список найденных файлов и папок в виде нумерованной таблицы (нумерация начинается с <var>1</var>), где<br />
		&nbsp;&nbsp;каждый элемент - структура содержащая:<br />
	</p>
		<table style="margin-left:8pt;margin-top:3pt;margin-bottom:3pt">
		<tr><th>Значение</th><th>Описание</th></tr>
		<tr>
			<td align="left">name</td>
			<td>имя папки или файла</td>
		</tr>
		<tr>
			<td align="left">isdirectory</td>
			<td>признак файл это или папка (<var>true</var> если папка, <var>false</var> если файл)</td>
		</tr>
		<tr>
			<td align="left">attributes</td>
			<td>атрибуты (см. ниже)</td>
		</tr>
		<tr>
			<td align="left">size</td>
			<td>размер файла в байтах</td>
		</tr>
		</table>
		<p>&nbsp;&nbsp;Атрибуты представлены в виде числа, которое может быть комбинацией следующих значений:<br /></p>
		<table style="margin-left:8pt;margin-top:3pt;margin-right:8pt">
		<tr><th>Значение</th><th>Описание</th></tr>
		<tr>
			<td>0x00000001</td>
			<td>Файл только для чтения. Приложения могут читать такой файл, но не могут записывать или удалять его.</td>
		</tr>
		<tr>
			<td>0x00000002</td>
			<td>Файл скрыт. Такой файл не включается в обычный листинг каталога.</td>
		</tr>
		<tr>
			<td>0x00000004</td>
			<td>Это системный файл. Обычно такой файл является частью операционной системы.</td>
		</tr>
		<tr>
			<td>0x00000010</td>
			<td>Это каталог.</td>
		</tr>
		<tr>
			<td>0x00000020</td>
			<td>Это архивный файл. Приложения должны использовать этот флаг для копирования, архивирования или удаления.</td>
		</tr>
		<tr>
			<td>0x00000080</td>
			<td>У этого файла не установлены другие атрибуты. Это значение корректно только при использовании без остальных флагов.</td>
		</tr>
		<tr>
			<td>0x00000100</td>
			<td>Это временный файл. Приложения должны записывать в такой файл только в крайней необходимости. Большая часть данных файла находится в памяти и не сбрасывается на диск, так как файл будет удален.</td>
		</tr>
		<tr>
			<td>0x00000200</td>
			<td>Файл является т.н. "Sparse file".</td>
		</tr>
		<tr>
			<td>0x00000400</td>
			<td>Каталог является символической связью.</td>
		</tr>
		<tr>
			<td>0x00000800</td>
			<td>Файл или каталог сжат. Для файла это означает, что все данные его сжаты, для каталога - что компрессия по умолчанию применяется ко всем его файлам и подкаталогам.</td>
		</tr>
		<tr>
			<td>0x00001000</td>
			<td>Данные файла не доступны непосредственно. Означает, что реальные данные файла были физически перемещены на устройства хранения.</td>
		</tr>
		<tr>
			<td>0x00002000</td>
			<td>Этот файл или каталог не будут индексироваться службой индексирования.</td>
		</tr>
		<tr>
			<td>0x00004000</td>
			<td>Файл или каталог зашифрован. Для файла, это означает, что все данные в файле зашифрованы. Для директория, это означает, что шифрование является умолчанием для вновь созданных файлов и подкаталогов.</td>
		</tr>
		<tr>
			<td>0x00010000</td>
			<td>Это виртуальный файл.</td>
		</tr>
		</table>
		<p>&nbsp;&nbsp;В случае неудачи возвращает <var>nil</var></p>
		<p><b>Пример использования:</b></p>
		<div class="example">
		local t = shell.findfiles("C:\\*")<br />
		if t then<br />
		&nbsp;&nbsp;table.sort(t,<br />
		&nbsp;&nbsp;&nbsp;&nbsp;function(v1,v2)<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if v1.isdirectory ~= v2.isdirectory then<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return v1.isdirectory<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return v1.name:lower() &lt; v2.name:lower()<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
		&nbsp;&nbsp;&nbsp;&nbsp;end<br />
		&nbsp;&nbsp;)<br />
		&nbsp;&nbsp;table.foreachi(t,<br />
		&nbsp;&nbsp;&nbsp;&nbsp;function(i,v)<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if v.isdirectory then<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(string.format("D%5x %s", v.attributes, v.name))<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(string.format(" %5x %-30s", v.attributes, v.name), v.size)<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
		&nbsp;&nbsp;&nbsp;&nbsp;end<br />
		&nbsp;&nbsp;)<br />
		else<br />
		&nbsp;&nbsp;print("not found")<br />
		end<br />
		</div>
	<p class="author">Автор: VladVRO</p>
</td></tr>

</table>

<h3>Загрузка</h3>

<p><u>Текущая версия Shell</u>: <var>1.2</var><br /></p>
<p>
<a href="http://scite-ru.googlecode.com/hg/pack/tools/LuaLib/shell.dll">shell.dll</a><br />
<a href="http://scite-ru.googlecode.com/hg/lualib/shell/">Исходный код</a>
</p>

</body>
</html>
